package com.core.utils;
import com.core.constants.JwtConstant;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Map;

public class JwtUtils {
    /**
     * ⽣成令牌
     *io.jsonwebtoken.Jwts;
     * @param claims 数据
     * @param secret 密钥
     * @return token
     */
    public static String createToken(Map<String, Object> claims, String secret) {
        String token = Jwts
                .builder()               //构建jwt对象
                .setClaims(claims)       //传入的claims加入到jwt
                .signWith(SignatureAlgorithm.HS512, secret) //用 HS512 算法和提供的 secret 密钥对 JWT 进行签名
                .compact();          //提交
        return token;
    }
    /**
     * 从令牌中获取数据
     *
     * @param token 令牌
     * @param secret 密钥
     * @return 数据
     */
    public static Claims parseToken(String token, String secret) {
        return Jwts
                .parser()              //创建一个解析器
                .setSigningKey(secret)  //设置签名密钥，用于验证令牌的合法性
                .parseClaimsJws(token) //解析令牌字符串为包含 Claims 的 JWS 对象
                .getBody();             //获取 JWT 中的载荷部分
    }

    public static String getUserKey(Claims claims) {
        Object value = claims.get(JwtConstant.LOGIN_LOGIN_KEY);
        return toString(value);
    }


    public static String getUserId(Claims claims) {
        Object value = claims.get(JwtConstant.LOGIN_LOGIN_ID);
        return toString(value);
    }

    private static String toString(Object value) {
        if (value ==null){
            return "";
        }
        return value.toString();
    }
}
